﻿// 3534. 矩阵幂.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
//

#include <iostream>
#include <vector>

using namespace std;
/*

https://www.acwing.com/problem/content/3537/
给定一个 n×n 的矩阵 P，求该矩阵的 k次幂，即 Pk。

输入格式
第一行包含两个整数 n和 k。

接下来有 n行，每行 n个整数，其中，第 i行第 j 个整数表示矩阵中第 i 行第 j 列的矩阵元素 Pij。

输出格式n 行 n列个整数，每行数之间用空格隔开。

数据范围
2≤n≤10
,
1≤k≤5
,
0≤Pij≤10
,
数据保证最后结果不会超过 108。

输入样例：
2 2
9 8
9 3
输出样例：
153 96
108 81
*/

int n, k;
vector<vector<int>> vv;
vector<vector<int>> unit;

void initUnit() {
	unit.resize(n, vector<int>(n));

	// 单位矩阵
	for (int i = 0; i < n; i++) {
		unit[i][i] = 1;
	}
}

vector<vector<int>> mult(vector<vector<int>> a, vector<vector<int>> b) {
	vector<vector<int>> ret(n, vector<int>(n));
	long long  x;
	for (int i = 0; i < n; i++) {
		for (int j = 0; j < n; j++) {
			x = 0;
			for (int k = 0; k < n; ++k) {
				x += ((long long)a[i][k] * b[k][j]);
			}
			ret[i][j] = x ;
		}
	}
	return ret;
}


void solve() {
	vector<vector<int>> res = unit;
	while (k) {
		if (k & 1) {
			res =  mult(res,vv);
		}
		vv = mult(vv, vv);
		k >>= 1;
	}

	for (int i = 0; i < n; i++) {
		for (int j = 0; j < n; j++) {
			cout << res[i][j] << " ";
		}
		cout << endl;
	}

	return;
}



int main()
{
	cin >> n >> k;

	vv.resize(n,vector<int>(n));
	initUnit();

	for (int i = 0; i < n; i++) {
		for (int j = 0; j < n; j++) {
			cin >> vv[i][j];
		}
	}
	
	solve();

	return 0;
}

 